package org.convallaria.system.biz.service;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 安全事件监控服务接口
 * 提供实时安全事件监控和告警功能
 * 
 * @author convallaria
 * @since 1.0.0
 */
public interface SecurityMonitoringService {

    /**
     * 记录安全事件
     * 
     * @param eventType 事件类型
     * @param userId 用户ID
     * @param ip IP地址
     * @param details 详细信息
     * @param severity 严重程度 (LOW, MEDIUM, HIGH, CRITICAL)
     */
    void recordSecurityEvent(String eventType, Long userId, String ip, String details, String severity);

    /**
     * 获取实时安全事件统计
     * 
     * @param minutes 统计时间范围（分钟）
     * @return 安全事件统计
     */
    Map<String, Object> getRealTimeSecurityStats(int minutes);

    /**
     * 获取高风险事件列表
     * 
     * @param limit 限制数量
     * @return 高风险事件列表
     */
    List<Map<String, Object>> getHighRiskEvents(int limit);

    /**
     * 检查IP是否在黑名单中
     * 
     * @param ip IP地址
     * @return 是否在黑名单中
     */
    boolean isIpBlacklisted(String ip);

    /**
     * 添加IP到黑名单
     * 
     * @param ip IP地址
     * @param reason 原因
     * @param duration 持续时间（小时）
     */
    void addIpToBlacklist(String ip, String reason, int duration);

    /**
     * 从黑名单移除IP
     * 
     * @param ip IP地址
     */
    void removeIpFromBlacklist(String ip);

    /**
     * 获取异常登录统计
     * 
     * @param hours 统计时间范围（小时）
     * @return 异常登录统计
     */
    Map<String, Object> getAbnormalLoginStats(int hours);

    /**
     * 检测异常登录行为
     * 
     * @param userId 用户ID
     * @param ip IP地址
     * @param userAgent 用户代理
     * @return 是否异常
     */
    boolean detectAbnormalLogin(Long userId, String ip, String userAgent);

    /**
     * 获取安全告警配置
     * 
     * @return 告警配置
     */
    Map<String, Object> getSecurityAlertConfig();

    /**
     * 更新安全告警配置
     * 
     * @param config 告警配置
     */
    void updateSecurityAlertConfig(Map<String, Object> config);

    /**
     * 发送安全告警通知
     * 
     * @param alertType 告警类型
     * @param message 告警消息
     * @param recipients 接收者列表
     */
    void sendSecurityAlert(String alertType, String message, List<String> recipients);

    /**
     * 获取用户安全评分
     * 
     * @param userId 用户ID
     * @return 安全评分 (0-100)
     */
    int getUserSecurityScore(Long userId);

    /**
     * 获取系统安全概览
     * 
     * @return 系统安全概览
     */
    Map<String, Object> getSystemSecurityOverview();
}
